prevod c++ do delphi

Otázka od: Matejcek Petr

22. 4. 2004 14:55

DD,

    snazim se prevest z c++ do delphi hlavicku sick.h a nevim si rady
jak do *.pas dostat toto:

#define UNIVERSE_FIFO_WAIT \
   do { \
   } while ((*sicl_universe_misc_stat & 0x00040000L) == 0)


#define ibpeek(addr) *((unsigned volatile char *)(addr))

pro jistotu se jeste zeptam nemate nekdo uz hotovy sicl.pas pro
komunikaci s kartou HPIB hledal jsem na webu ale marne


diky PM

Odpovedá: Dalibor Toman

22. 4. 2004 16:54

On Thursday, April 22, 2004 3:32 PM [CET], Matejcek Petr
<konference@crhov.komfi.cz> wrote:

> DD,
>
> snazim se prevest z c++ do delphi hlavicku sick.h a nevim si
rady
> jak do *.pas dostat toto:
>
> #define UNIVERSE_FIFO_WAIT \
> do { \
> } while ((*sicl_universe_misc_stat & 0x00040000L) == 0)

je to jen obycejne makro. Podle mne by melo vsechny vyskyty
UNIVERSE_FIFO_WAIT nahradit cyklem:

  do { } while ((*sicl_universe_misc_stat & 0x00040000L) == 0)

cili si to v pascalu musis prepsat obdobne. sicl_universe_misc_stat
bude zrejme nejaka funkce nebo globalni promenna nastavovana necim
asynchronnim.

>
> #define ibpeek(addr) *((unsigned volatile char *)(addr))
>

tohle by snad melo byt jen nejake zbesile pretypovani (pretypovani mi
nevadi ale jejich zapis v CCku primo 'miluju'). Mohlo by to slouzit ke
cteni pameti z adresy zadane v addr. Tech hvezdicek a zavorek je tam
na muj vkus nejak moc. Konkretni vyklad te definice bych radsi
odhadoval se znalosti dalsiho kontextu  . Zrejme ale v addr je
adresa, kterou pretypuji na unsigned char (proc je ta volatile
netusim, vyznam by snad menit nemelo). No a ta hvezdicka uplne vlevo z
toho dela pointer na pointer, ale proc se to pred ni (resp za ni)
pretypovava na ten char netusim.

muj hruby odhad je :

Byte(Pointer(Pointer(addr)^)^)

  samozrejme jde to napsat i lip..


> pro jistotu se jeste zeptam nemate nekdo uz hotovy sicl.pas pro
> komunikaci s kartou HPIB hledal jsem na webu ale marne

s HPIB jsem prisel sice kdysi do styku (karta od Hewlet-Packard). Ke
karte byla pascalska unita, ale z HPIB komunikace jsem byl tezce
zklamany. To co fungovat melo, nefungovalo, komunikace byla strasne
pomala (mam na mysli reakcni dobu (dotaz/odpoved)). Vzhledem k tomu,
ze asynchronni veci nefungovaly (nebo je HPIB neumi? ) a ten program
cetl z mnoha cidel i mimo HPIB tak to byl docela velkej hack, ze to
nakonec chodilo. Do dneska netusim, zda na vine byla ta karta nebo
zarizeni k ni pripojene (nejakej merak od Rohde&Schwarz nebo jak se
tam firma jmenuje). Komponenty za priserny penize a obycejna seriovka
byla proti tomu zlata.

D. Toman


Odpovedá: Slavomir Skopalik

22. 4. 2004 17:13

Neco jako

while(sicl_universe_misc_stat^ and $00040000)=0 do;

 Slavek

>
> DD,
>
> snazim se prevest z c++ do delphi hlavicku sick.h a
> nevim si rady
> jak do *.pas dostat toto:
>
> #define UNIVERSE_FIFO_WAIT \
> do { \
> } while ((*sicl_universe_misc_stat & 0x00040000L) == 0)
>


Odpovedá: Blazek Jaroslav

22. 4. 2004 18:12

Ahoj,

> konference@crhov.komfi.cz 22.4.2004 15:32:45 >>>
> snazim se prevest z c++ do delphi hlavicku sick.h a nevim si rady

>jak do *.pas dostat toto:

>#define UNIVERSE_FIFO_WAIT \
> do { \
> } while ((*sicl_universe_misc_stat & 0x00040000L) == 0)

toto je makro, takze vsude v kodu, kde je UNIVERSE_FIFO_WAIT musis
prepsat na

while (sicl_universe_misc_stat^ and $00040000) = 0 do
;

nebo si udalat fci...

>#define ibpeek(addr) *((unsigned volatile char *)(addr))

type PByte = ^byte;

var b : byte;

b := PByte(addr)^;

nevim, ale jak v Delphi nahradit modifikator "volatile", mozna vi nekdo
jiny...
- rika kompilatoru....promenna, ktera je definovana jako volatile, muze
byt modifikovana nejakou nespecifikovanou asynchronni udalosti


S pozdravem

Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644